const VectorStoreService = require('../vectorStore');

class BaseRagService {
  static COLLECTION_NAME = 'baseRag';

  // 初始化向量存储
  static async initVectorStore(collectionName) {
    try {
      // 初始化向量存储集合
      await VectorStoreService.initCollection(collectionName);
    } catch (error) {
      console.error('初始化向量存储失败:', error);
      throw error;
    }
  }

  // 初始化数据（子类需要重写此方法）
  static async initializeData() {
    // 默认实现为空，子类应该根据具体需求重写此方法
    console.log('注意：子类需要重写initializeData方法以初始化数据');
  }

  // 处理文档内容
  static async processContent(docs, collectionName, additionalMetadata = {}) {
    try {
      // 初始化向量存储
      await this.initVectorStore(collectionName);

      // 添加文档到向量存储
      const result = await VectorStoreService.addDocuments(collectionName, docs.map(doc => ({
        ...doc,
        metadata: {
          ...doc.metadata,
          ...additionalMetadata,
          processed_at: new Date().toISOString()
        }
      })));

      return result;
    } catch (error) {
      console.error('处理文档内容失败:', error);
      throw error;
    }
  }

  // 相似度搜索
  static async similaritySearch(collectionName, query, k = 5) {
    try {
      return await VectorStoreService.similaritySearch(collectionName, query, k);
    } catch (error) {
      console.error('文档内容相似度搜索失败:', error);
      throw error;
    }
  }

  // 删除文档内容
  static async deleteContent(collectionName) {
    try {
      return await VectorStoreService.deleteDocuments(collectionName);
    } catch (error) {
      console.error('删除文档内容失败:', error);
      throw error;
    }
  }
}

module.exports = BaseRagService;